  MapNameLen    = 16;
  CurMapNameLen = 16;
  HomMapNameLen = 17;
  ActorNameLen  = 14;
  AccountNameLen= 16;

  MAXBAGITEM    = 46;       //ûƷ
  MAXSTORAGEITEMS = 45;     //ֿƷ
  //MAXBAGITEM    = 48;
  HOWMANYMAGICS = 20;          //û
  //MAXBAGITEM   = 46;         //ûƷ
  MaxSkillLevel = 3;
  MAX_STATUS_ATTRIBUTE = 15;             //ʥսԱ   //ħ


  pTUserItem=^TUserItem;
  TUserItem=record                         //=24
    MakeIndex       :Integer;              //+4
    wIndex          :Word;                 //+2
    Dura            :word;                 //+2
    DuraMax         :Word;                 //+2
    btValue         :Array[0..MAXBTVALUE] of byte; //+14
  end;

TQuestFlag=array[0..99] of Byte;
TQuestUnit=array[0..12] of Byte;
THumItems=array[0..MAXUSEITEMS] of TUserItem;
TBagItems=array[0..MAXBAGITEM-1] of  TUserItem;
TStorageItems=array[0..MAXSTORAGEITEMS] of TUserItem;

  TOAbility =record  //OK    //Size 40
    Level         :Word;  //0x198
    AC            :Word;  //0x19A
    MAC           :Word;  //0x19C
    DC            :Word;  //0x19E
    MC            :Word;  //0x1A0
    SC            :Word;  //0x1A2
    HP            :Word;  //0x1A4
    MP            :Word;  //0x1A6
    MaxHP         :Word;  //0x1A8
    MaxMP         :Word;  //0x1AA
    GAMEDIAMOND   :Word;  //BLUEʯ
    GAMEGIRD      :Word;  //BLUE
    Exp           :Dword;  //0x1B0
    MaxExp        :Dword;  //0x1B4
    Weight        :Word;  //0x1B8
    MaxWeight     :Word;  //0x1BA
    WearWeight    :Byte;  //0x1BC
    MaxWearWeight :Byte;  //0x1BD
    HandWeight    :Byte;  //0x1BE
    MaxHandWeight :Byte;  //0x1BF
  end;

  TStatusTime=array [0..MAX_STATUS_ATTRIBUTE - 1] of Word;

  pTNakedAbility=^TNakedAbility;
  TNakedAbility = packed record
    DC    :Word;
    MC    :Word;
    SC    :Word;
    AC    :Word;
    MAC   :Word;
    HP    :Word;
    MP    :Word;
    Hit   :Word;
    Speed :Word;
    X2    :Word;
  end;

  TSaveUserMagic=record
    wMagIdx:word;
    btLevel:byte;
    btKey:byte;
    nTranPoint:integer;
  end;
  pTSaveUserMagic=^TSaveUserMagic;


  pTHumMagic=^THumMagic;
  THumMagic=Array[0..HOWMANYMAGICS-1] of TSaveUserMagic;

  THumDataInfo= packed record
    Header:THumRecordHeader;
    Data:THumData;
  end;

  pTHumData=^THumData;
  THumData = packed record       //3164
    sChrName        :String[ActorNameLen];   //152
    sCurMap         :String[CurMapNameLen];     //167
    wCurX           :Word;                   //184
    wCurY           :Word;                   //186
    btDir           :Byte;                   //188
    btHair          :Byte;                   //189
    btSex           :Byte;                   //190
    btJob           :Byte;                   //191
    nGold           :Integer;                //192

//    Abil            :TAbility;               //196
    Abil            :TOAbility;
    wStatusTimeArr  :TStatusTime;
    sHomeMap        :String[HomMapNameLen];
    wHomeX          :Word;
    wHomeY          :Word;

    sDieMap         :String[HomMapNameLen];
    wDieX           :Word;
    wDieY           :Word;

    sDearName       :String[ActorNameLen];       //
    sMasterName     :String[ActorNameLen];       //ʦͽ
    boMaster        :Boolean;                    //ǷΪʦ
    sHeroName       :String[ActorNameLen];    //Ӣ
    boHero          :Boolean;                 //ǷΪӢ
    btCreditPoint   :integer;                  //
    btReLevel       :Byte;                 //תȼ
    sStoragePwd     :String[7];

    nMentExp        :LongWord;                  //˫
    nMentExpTime    :LongWord;               //˫ʱ

    BonusAbil       :TNakedAbility;
    nBonusPoint     :Integer;

    nGameGold       :Integer;
    nGamePoint      :Integer;
    nGameDiamond    :Integer;     //ʯ
    nGameGird       :Integer;     //
    nPayMentPoint   :Integer;       //ֵ
    nPKPoint        :Integer;
    nKillMonCount   :Integer;            //ɱִ   \
    btMasterCount   :Integer;

    btAllowGroup    :Byte;
    btF9            :Byte;
    btAttatckMode   :Byte;           //ģʽ 374
    btIncHealth     :Byte;
    btIncSpell      :Byte;
    btIncHealing    :Byte;
    btFightZoneDieCount:Byte;
    //btEE            :Byte;
    //btEF            :Byte;
    sAccount        :String[AccountNameLen];
    boLockLogon     :Boolean;

    wContribution   :Word;
    nHungerStatus   :Integer;
    boAllowGuildReCall:Boolean;
    wGroupRcallTime :Word;
    dBodyLuck       :TDateTime;
    boAllowGroupReCall:Boolean;
    boChangeName    :Boolean;
    nIconIdx        :Array[0..4] of Word;
    nDiploidRate    :Byte;                //
    nGloryPoint     :Word;
    HeroName1       :String[ActorNameLen];
    HeroLevel1      :Word;
    HeroJob1        :Byte;
    HeroGender1     :Byte;
    HeroName2       :String[ActorNameLen];
    HeroLevel2      :Word;
    HeroJob2        :Byte;
    HeroGender2     :Byte;
    HeroClass       :Boolean;

    //Reserved        :Array[0..339] of Byte;
    Magic1          :THumMagic;//SIZE 160 б2
    dwWineValue     :LongWord;//ֵ
    dwAlcoho        :LongWord;//

    dwMedicineValue :Word;//ǰҩֵ
    dwMedicineLevel :Word;//ҩȼ

    dwSKILL84Level  :Word;//ȼ
    dwSKILL84Exp    :LongWord;//徭

    boISONMAKEWINE  :Byte;//Ƿ־ 0û1ͨ2ҩ
    dtGetGuildFountain:TDateTime; //ȡлȪˮʱ
    dtMakeWineTime  :TDateTime;//ʼƵʱ
    WineItem        :TUserItem;//ľ

    dtAlcohoTime:TDateTime;//ͨʱ
    dtMedicineAlcohoTime:TDateTime;//ҩʱ

    bLiquorProgress:Byte;//ֵ
    dtGetCastleFountain:TDateTime; //ɳȪˮʱ
 //   skill83Level:Byte; //Ԫȼ
    CallCloneTick:LongWord; //ʱ
    dwOpenShieldTick:LongWord;//
    
    Reserved        :Array[0..83] of Byte;

    QuestFlag       :TQuestFlag;
    Reserved2       :Array[0..25] of Byte;
    //QuestOpen       :TQuestUnit;
    //QuestUnit       :TQuestUnit;

    HumItems        :THumItems;
    BagItems        :TBagItems;
    Magic           :THumMagic;
    StorageItems    :TStorageItems;
  end;


